﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using BLL.Validation;
using Entities;
using DAL.IRepository;
namespace BLL
{

    public class QuanLyTKBDeNghiManager : IValidator<QuanLyTKBDeNghi>
    {
        private readonly IGeneralRepository<QuanLyTKBDeNghi> _repository;

        public QuanLyTKBDeNghiManager(IGeneralRepository<QuanLyTKBDeNghi> itr)
        {
            _repository = itr;
        }

        public ValidationResult Validate(QuanLyTKBDeNghi QLTKBDeNghi)
        {
            var vResult = new ValidationResult();
            if (QLTKBDeNghi.TuNgay<DateTime.Now.AddDays(5))
                vResult.Messages.Add("Ngày đầu tuần không hợp lệ");
            if (QLTKBDeNghi.Tuan <= 0)
                vResult.Messages.Add("Tuần phải lớn hơn 0");
            if (QLTKBDeNghi.NgayLap.AddDays(5) > QLTKBDeNghi.TuNgay)
                vResult.Messages.Add("Ngày lập phải trước ngày đầu tuần ít nhất 5 ngày");
            if (string.IsNullOrEmpty(QLTKBDeNghi.NguoiLap.Trim()))
                vResult.Messages.Add("Tên người lập phải khác rỗng");

            return vResult;
        }

        public ActionResult InsertOrUpdate(QuanLyTKBDeNghi QLTKBDeNghi)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.InsertOrUpdate(QLTKBDeNghi))
                    aResult.Exceptions.Add(new Exception("Thêm mới môn học không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(QuanLyTKBDeNghi QLTKBDeNghi)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(QLTKBDeNghi))
                    aResult.Exceptions.Add(new Exception("Xóa thông tin TKB đề nghị không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }



        public ActionResultAsList<QuanLyTKBDeNghi> Find(Expression<Func<QuanLyTKBDeNghi, bool>> predicate)
        {
            var aResult = new ActionResultAsList<QuanLyTKBDeNghi>();
            try
            {
                aResult.Result = _repository.Find(predicate).ToList();
                if (aResult.Result.Count == 0)
                    aResult.Exceptions.Add(new Exception("Không tìm thấy môn học thỏa điều kiện"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }


    }
}
